u`
eLXgсFp.405uLINQƂ́v
Q[JKFëړAAj[VA Ȃ

p.405 LINQƂ

ESQL(f[^x[X쌾)ɋ߂\ɂāAf[^\̌sd|
ESQL̏F
@SELECT ږ,c FROM \ WHERE ږ Zq lȂ
F
@SELECT X^[,HP FROM X^[\ WHERE HP > 100
ESQLɂ錟̃|CgFlԂ֐⃁\bhƈقȂAf[^\Ԃ
ELINQ̑ΏۗF zAXgȂǂ̃RNVAXML Ȃ

p.406 LINQ̃NG

ENGƂSQLɂ₢킹̂ƂŁAf[^\Ԃ
EC#񋟂WFlbNC^[tFCXpƁASQLɋ߂\g

p.408 linq01.cs

//p.408 linq01.cs
using System;
using System.Linq; //LINQ\p
using System.Collections.Generic; //IEnumerable<T>C^[tFCXp 
class linq01 {
    public static void Main() {
        int[] numbers = new int[] { -3, 4, 1, 2, -6, 3, 100, -25}; //NGΏۂ̔z
        // NG̍쐬
        IEnumerable<int> q = from n in numbers //znumbers
                where n > 0 //vflł̂
                select n; //ʂ̍\Ԃ
        // NG̎s
        foreach (int x in q) { //IEnumerable<T>C^[tFCX^IuWFNgSvf(int^)ɂČJԂ
            Console.WriteLine(x);
        }
    }
}

p.406 LINQ̃NGij

ELINQ\pɂ́uusing System.Linq;vLq(K{)
ELINQ\œf[^\́AIEnumerable<T>C^[tFCX^ɂȂ
ẼWFlNXɁANGΏۂ̌^w肷
EzΏۂƂꍇ́Az̗vf^w肷Ηǂ
EꂽIEnumerable<T>C^[tFCX^̃IuWFNgAforeachȂǂŗvfoJԂƗǂ
ENG̊{F 
@from ږ in \ where ږ Zq l select \
Ez̏ꍇ̃NG̊{F 
@from ƕϐ in z where ƕϐ Zq l select z
EȂAIQueryable<T>p邱Ƃ\
 VS2008łp.407Lڂ̎菇KvAVS2008Õo[Wł͗ps

p.409 f[^̕בւƌ

ELINQ̃bg̈SQL̃\[g@\֐@\Ȃǂ𗘗pł邱
E\F
@from ږ in \ orderby Ώۍږ select \
EKl͏(ˑ)AΏۍږ descending tLƍ~(ˏ)ɂȂ
EꂽIEnumerable<T>C^[tFCX^̃IuWFNgŁACount()\bhĂԂƌ
@ SQLłCOUNT(*)\Ō

p.409 linq02.cs

//p.409 linq02.cs
using System;
using System.Collections.Generic; //IEnumerable<T>C^[tFCXp 
using System.Linq; //LINQ\p
class linq02 {
  public static void Main() {
    string[] myStr = {"flower", "cat", "dog", "bird", "rabbit"}; //NGΏۂ̔z
    // NG̍쐬
    IEnumerable<string> q =
      from s in myStr  //zmyStr
      where s.Length >=  4 //vfl̕4ȏł̂
      orderby s descending //vfl̍~ɐ񂹂
      select s;
    // NG̎s
    foreach (string x in q)
      Console.WriteLine(x);
    // ɓKvf̌
    Console.WriteLine("K={0}", q.Count());
  }
}

p.410 var^̗p

ENGԂIuWFNǧ^IEnumerable<T>C^[tFCX^ƌ܂Ă
EA^p[^̌^NGɂĎł
EāAIEnumerable<T>^varL[[hŒuėǂ
Eɂuusing System.Collections.Generic;v̂ŋLqsv
 āAforeachŗpƕϐ̌^varL[[hwŗǂ

쐬

//AWKFp.409 linq02.cs
using System;
using System.Linq; //LINQ\p
class linq02 {
  public static void Main() {
    string[] myStr = {"flower", "cat", "dog", "bird", "rabbit"}; //NGΏۂ̔z
    // NG̍쐬
    var q = from s in myStr where s.Length >= 4 orderby s descending select s;
    // NG̎s
    foreach (var x in q) {
      Console.WriteLine(x);
    }
    // ɓKvf̌
    Console.WriteLine("K={0}", q.Count());
  }
}

p.410 ListRNṼf[^o

EzƓlList<T>^̃RNVIuWFNgLINQňƂ\
ȄꍇAList<T>^ɗ^^p[^IɃNGʂ̗vf^ɂȂ
EList<T>^̗pɂ́uusing System.Collections.Generic;vKv

p.411 linq03.cs

//p.411 linq03.cs
using System;
using System.Collections.Generic; //List<T>p
using System.Linq; //LINQ\p
class data { //ListɊi[IuWFNǧ^ɂȂNX
  public string name;
  public string address;
  public int age;
}
class linq03 {
  public static void Main() {
    List<data> mydata = new List<data> { //NXdatavf^Ƃ郊Xg
        new data { name = "cav", address = "s", age = 24 }, //IuWFNgqŐ
        new data { name = "؋`j", address = "s", age = 17 },
        new data { name = "gcq", address = "X", age = 24 },
        new data { name = "cav", address = "s", age = 34 },
        new data { name = "шY", address = "kC", age = 29 }
    };
    // ̃f[^ǉ
    data datax = new data();
    datax.name = "HNF";
    datax.address = "kC";
    datax.age = 22;
    mydata.Add(datax); //ListIuWFNgɊi[
    // Ṽf[^ǉ
    mydata.Add(new data { name = "LRY", address = "X", age = 15 }); //IuWFNgqŐ
    var q = from x in mydata
            where x.age < 30
            orderby x.age ascending //ascending͏ȗ\
            select x; //NGs
    Console.WriteLine("\t\tZ\tN");
    foreach (data z in q) {
      Console.WriteLine("{0}\t{1}\t{2}", z.name, z.address, z.age);
    }
  }
}

p.412 \bh\̗p

ELINQ̃NG\C#̕@Ɠ܂Ȃ̂ŁAǐ̂߂ɁA\bhhbgłȂ`̃\bh\pł
EF
@\.Where(\bh).Select(I\bh);
E\bh̏F
@static bool \bh(^ ƕϐ) { return ƕϐp; }
EI\bh̏F
@static ڌ^ I\bh(^ ƕϐ) { return ƕϐ; }
E\[gȂǂ\
EF
@\.Orderby(񃁃\bh).Select(I\bh);
@\.OrderbyDesending(񃁃\bh).Select(I\bh); //~p
E񃁃\bh̏F
@static ڌ^ 񃁃\bh(^ ƕϐ) { return ƕϐ; }

p.413 linq04.cs

//p.413 linq04.cs
using System;
using System.Linq; //LINQ\p
class linq04 {
  static bool MyWhere(int x) { //\bh
    return (x > 0); //ƕϐpď(̐̂)\
  }
  static int MyOrderBy(int x) { //񃁃\bh
    return x; //œƕϐԂ̂
  }
  static int MySelect(int x) { //I\bh
    return x; //œƕϐԂ̂
  }
  public static void Main() {
    int[] numbers = new int[] {200, -3, 4, 1, 2, -6, 3, 100, -25}; //NGΏۂ̔z
    //\bh\
    var q = numbers.Where(MyWhere) //\bhw
      .OrderByDescending(MyOrderBy) //񃁃\bhw肵~Ń\[g
      .Select(MySelect); //I\bhw
    //NG̎s
    foreach (int x in q) {
      Console.WriteLine(x);
    }
  }
}

p.415i\bh\ɂ铽\bh̗pj

E\bh\ŕʋLĂe\bh́A\bh(p.304)ɂ邱ƂŊȗł
EF
@\.Where(delegate(^ ){return ;}).Select(delegate(^ ){return ;});
EfQ[gɂAe\bhʋLKvȂȂ

p.415 linq05.cs

//p.415 linq05.cs
using System;
using System.Linq; //LINQ\p
class linq05 {
  public static void Main() {
    int[] numbers = new int[] {200, -3, 4, 1, 2, -6, 3, 100, -25}; //NGΏۂ̔z
    //\bh\
    var q = numbers.Where(delegate(int x) { return x > 0; }) //fQ[gŎw
      .OrderByDescending(delegate (int x) { return x; }) //񃁃\bhfQ[gŎw肵~Ń\[g
      .Select(delegate (int x) { return x; }); //IfQ[gŎw
    //NG̎s
    foreach (int x in q)
      Console.WriteLine(x);
  }
}

p.415i\bh\ɂ郉_̗pj

E\bh̓_(p.306)ɂ邱ƂŁAVvɂł
EF
@\.Where( => ).Select( => );
E^̎肪ł̂ŁA^͏ȗ\
Eu => v͈ꗥɁux => xvuw => wvȂǂƂOK

p.415 linq06.cs

//p.415 linq06.cs
using System;
using System.Linq; //LINQ\p
class linq05 {
  public static void Main() {
    int[] numbers = new int[] {200, -3, 4, 1, 2, -6, 3, 100, -25}; //NGΏۂ̔z
    //\bh\
    var q = numbers.Where(x => x > 0) //_Ŏw
      .OrderByDescending(x => x) //_Ŏw肵~Ń\[g
      .Select(x => x); //I_Ŏw
    //NG̎s
    foreach (int x in q)
      Console.WriteLine(x);
  }
}

eLXgю\Fp.416uXMLf[^LINQv

Q[JKFëړAAj[VA Ȃ

K27 e̕\(Pƃo[W)쐬FČf

//K27 e̕\(Pƃo[W)
using System; //tH[AvP[VɕK{
using System.Windows.Forms; //tH[AvP[VɕK{
using System.Drawing; //Imagep
struct Item { //ACe\\
    public Image i; //摜
    public int x;  //SXW
    public int y;  //SYW
    public int hv; //Ȇx(͕̐AE͐̐)
    public int v;  //\(0F\A1ȏF\)
}
class Program : Form { //FormNXp
    [System.Runtime.InteropServices.DllImport("user32.dll")] //ODLL̃C|[g
    private static extern short GetKeyState(int nVirtKey); //\bh̊O`w
    int gamemode = 0; //0:X^[gʁA1:vC
    int score = 0; //XRA
    Image backi = Image.FromFile("backb.bmp"); //wi摜̓Ǎ
    Image playeri = Image.FromFile("player.gif"); //@摜̓Ǎ
    Image playerl = Image.FromFile("playerl.gif"); //@摜̓Ǎ
    Image playerr = Image.FromFile("playerr.gif"); //@E摜̓Ǎ
    Image bulleti = Image.FromFile("bullet.gif"); //yǉze摜̓Ǎ
    Font font1 = new Font("CI", 20, FontStyle.Bold); //tHg𐶐(CI20P)
    Font fontt = new Font("CI", 80, FontStyle.Bold); //tHg𐶐(CI80P)
    Brush brushs = new SolidBrush(Color.Yellow); //uV𐶐(F)
    Timer timer = new Timer(); //^C}[𐶐
    int backy = 0; //wi摜̂ȂڂYW
    Item player; //vC[̍\̃IuWFNg
    Item pb; //yǉze̍\̃IuWFNg
    //SWpĉ摜`
    private void DrawItem(PaintEventArgs e, Item it) {
        int xx = it.x - it.i.Width / 2; //̔čXW𓾂
        int yy = it.y - it.i.Height / 2; //̔čYW𓾂
        e.Graphics.DrawImage(it.i, xx, yy);
    }
    protected override void OnPaint(PaintEventArgs e) { //Form̃\bhI[o[Ch
        base.OnPaint(e); //܂AFormNXɂ郁\bh̓e({ĕ`揈)s
        e.Graphics.DrawImage(backi, 0, backy); //wi摜(0,Ȃ)`
        e.Graphics.DrawImage(backi, 0, backy - backi.Height); //wi摜̏ɕ`
        if (gamemode == 0) { //X^[g
            e.Graphics.DrawString("GAME1", fontt, brushs, 100, 100); //^Cg̕`
            e.Graphics.DrawString("Hit Enter to Start", font1, brushs, 200, 300); //bZ[W̕`
        } else if (gamemode == 1) { //vC
            string s = String.Format("SCORE:{0:000,000}", score); //XRAҏW
            e.Graphics.DrawString(s, font1, brushs, 400, 10); //XRA̕`
            switch (player.hv) { //@̌ɂĕ
                case  0: player.i = playeri; break; //ʏ
                case  1: player.i = playerr; break; //E 
                case -1: player.i = playerl; break; //
            }
            DrawItem(e, player); //@\
            if (pb.v == 1) { //yȉǉzeH 
                DrawItem(e, pb); //e\
            }
        }
    }
    void OnKeyDown(object o, KeyEventArgs e) { //L[{[hꂽɌĂ΂郁\bh
        if(e.KeyCode.ToString() == "Escape") { //EscL[ꂽ
            Close(); //tH[AvP[VI
        }
        if(gamemode == 0 && e.KeyCode.ToString() == "Return") { //X^[gʂEnterL[ꂽ
            gamemode = 1; //vCʂɐ؂ւ
            timer.Start(); //^C}[Jn
            Invalidate(); //ʍĕ`˗
        }
    }
    void Play(object o, EventArgs e) { //^C}[Ă΂郁\bh
        backy = (backy < backi.Height) ? backy + 1 : 0; //wi摜̂Ȃڂ
        if (gamemode == 1) { //vC
            player.hv = 0; //@̌ʏɂ
            if (player.x > playeri.Width / 2 && GetKeyState((int)Keys.Left) < 0)
            { //[ł͂ȂL[ĂH
                player.x -= 10; //@
                player.hv = -1; //Ɉړ
            }
            if (player.x < backi.Width - playeri.Width / 2 && GetKeyState((int)Keys.Right) < 0) { //E[ł͂ȂL[ĂH
                player.x += 10; //@E
                player.hv = 1; //EɈړ
            }
        }
        if (GetKeyState((int)Keys.Space) < 0) { //yȉǉzXy[XL[ĂH
            if (pb.v == 0) { //e펞H
                pb.v = 1; //\ɂ
                pb.i = bulleti; //摜ݒ
                pb.x = player.x; //XW͎@̒Sɍ킹
                pb.y = player.y - player.i.Height / 2 - pb.i.Height / 2; //YW͎@̒ɍ킹
            }
        }
        Invalidate(); //ʍĕ`˗
    }
    Program() { //RXgN^
        DoubleBuffered = true; //_uobt@O̓
        KeyDown += new KeyEventHandler(OnKeyDown); //L[{[hꂽɌĂ΂郁\bho^
        timer.Tick += new EventHandler(Play); //^C}[Ă΂郁\bho^
        timer.Interval = 10; //^C}[̊Ԋu
        player.i = playeri; //@̉摜
        player.x = 320; //@XW
        player.y = 410; //@YW
        player.hv = 0; //@̍Ȇx
    }
    static void Main() { //public̎w͔C
        Program f = new Program(); //ptH[̃CX^X𐶐
        f.Size = new Size(660, 520); //CX^XSizevpeBɍƕ
        f.Text = "Game"; //CX^XTextvpeBɃtH[
        f.ControlBox = false; //ControlBox\ɂ
        f.FormBorderStyle = FormBorderStyle.Fixed3D; //tH[TCYύX֎~
        Application.Run(f); //CX^Xʂɏo
    }
}

K28 ȅړ(Pƃo[W)

EeoԂł΁Aֈړ悤
ESɌȂȂAoԂ𖳂ɖ߂čĔˉ\ɂ悤
E㉺̈ړxvvItem\̂ɒǉ悤(l͓K)

菇Ǝdl

@ ACe\\̂ɏ㉺̑x(͕̐A͐̐)int^ϐvvǉ
A ^C}[CxgFXy[XL[Ă違e\Ȃ΁Aȅړx-5
B ^C}[CxgFe݂AeֈړAʏ[ɏo玩e

쐬

//K28 ȅړ(Pƃo[W)
using System; //tH[AvP[VɕK{
using System.Windows.Forms; //tH[AvP[VɕK{
using System.Drawing; //Imagep
struct Item { //ACe\\
    public Image i; //摜
    public int x;  //SXW
    public int y;  //SYW
    public int hv; //Ȇx(͕̐AE͐̐)
    public int vv; //yǉz㉺̑x(͕̐A͐̐)
    public int v;  //\(0F\A1ȏF\)
}
class Program : Form { //FormNXp
    [System.Runtime.InteropServices.DllImport("user32.dll")] //ODLL̃C|[g
    private static extern short GetKeyState(int nVirtKey); //\bh̊O`w
    int gamemode = 0; //0:X^[gʁA1:vC
    int score = 0; //XRA
    Image backi = Image.FromFile("backb.bmp"); //wi摜̓Ǎ
    Image playeri = Image.FromFile("player.gif"); //@摜̓Ǎ
    Image playerl = Image.FromFile("playerl.gif"); //@摜̓Ǎ
    Image playerr = Image.FromFile("playerr.gif"); //@E摜̓Ǎ
    Image bulleti = Image.FromFile("bullet.gif"); //e摜̓Ǎ
    Font font1 = new Font("CI", 20, FontStyle.Bold); //tHg𐶐(CI20P)
    Font fontt = new Font("CI", 80, FontStyle.Bold); //tHg𐶐(CI80P)
    Brush brushs = new SolidBrush(Color.Yellow); //uV𐶐(F)
    Timer timer = new Timer(); //^C}[𐶐
    int backy = 0; //wi摜̂ȂڂYW
    Item player; //vC[̍\̃IuWFNg
    Item pb; //e̍\̃IuWFNg
    //SWpĉ摜`
    private void DrawItem(PaintEventArgs e, Item it) {
        int xx = it.x - it.i.Width / 2; //̔čXW𓾂
        int yy = it.y - it.i.Height / 2; //̔čYW𓾂
        e.Graphics.DrawImage(it.i, xx, yy);
    }
    //`揈
    protected override void OnPaint(PaintEventArgs e) { //Form̃\bhI[o[Ch
        base.OnPaint(e); //܂AFormNXɂ郁\bh̓e({ĕ`揈)s
        e.Graphics.DrawImage(backi, 0, backy); //wi摜(0,Ȃ)`
        e.Graphics.DrawImage(backi, 0, backy - backi.Height); //wi摜̏ɕ`
        if (gamemode == 0) { //X^[g
            e.Graphics.DrawString("GAME1", fontt, brushs, 100, 100); //^Cg̕`
            e.Graphics.DrawString("Hit Enter to Start", font1, brushs, 200, 300); //bZ[W̕`
        } else if (gamemode == 1) { //vC
            string s = String.Format("SCORE:{0:000,000}", score); //XRAҏW
            e.Graphics.DrawString(s, font1, brushs, 400, 10); //XRA̕`
            switch (player.hv) { //@̌ɂĕ
                case  0: player.i = playeri; break; //ʏ
                case  1: player.i = playerr; break; //E 
                case -1: player.i = playerl; break; //
            }
            DrawItem(e, player); //@\
            if (pb.v == 1) { //eH 
                DrawItem(e, pb); //e\
            }
        }
    }
    //L[͎
    void OnKeyDown(object o, KeyEventArgs e) { //L[{[hꂽɌĂ΂郁\bh
        if(e.KeyCode.ToString() == "Escape") { //EscL[ꂽ
            Close(); //tH[AvP[VI
        }
        if(gamemode == 0 && e.KeyCode.ToString() == "Return") { //X^[gʂEnterL[ꂽ
            gamemode = 1; //vCʂɐ؂ւ
            timer.Start(); //^C}[Jn
            Invalidate(); //ʍĕ`˗
        }
    }
    //^C}[Cxg
    void Play(object o, EventArgs e) { //^C}[Ă΂郁\bh
        backy = (backy < backi.Height) ? backy + 1 : 0; //wi摜̂Ȃڂ
        if (gamemode == 1) { //vC
            player.hv = 0; //@̌ʏɂ
            if (player.x > playeri.Width / 2 && GetKeyState((int)Keys.Left) < 0)
            { //[ł͂ȂL[ĂH
                player.x -= 10; //@
                player.hv = -1; //Ɉړ
            }
            if (player.x < backi.Width - playeri.Width / 2 && GetKeyState((int)Keys.Right) < 0) { //E[ł͂ȂL[ĂH
                player.x += 10; //@E
                player.hv = 1; //EɈړ
            }
        }
        if (GetKeyState((int)Keys.Space) < 0) { //Xy[XL[ĂH
            if (pb.v == 0) { //e펞H
                pb.v = 1; //\ɂ
                pb.i = bulleti; //摜ݒ
                pb.x = player.x; //XW͎@̒Sɍ킹
                pb.y = player.y - player.i.Height / 2 - pb.i.Height / 2; //YW͎@̒ɍ킹
                pb.vv = -5; //yǉzړxݒ
            }
        }
        if (pb.v == 1) { //yȉǉze݂
            pb.y += pb.vv; //YWɏړx𔽉f邱Ƃŏ㏸
            if (pb.y + pb.i.Height / 2 < 0) { //ʏ[ɏo
                pb.v = 0; //e
            }
        }
        Invalidate(); //ʍĕ`˗
    }
    //RXgN^
    Program() { 
        DoubleBuffered = true; //_uobt@O̓
        KeyDown += new KeyEventHandler(OnKeyDown); //L[{[hꂽɌĂ΂郁\bho^
        timer.Tick += new EventHandler(Play); //^C}[Ă΂郁\bho^
        timer.Interval = 10; //^C}[̊Ԋu
        player.i = playeri; //@̉摜
        player.x = 320; //@XW
        player.y = 410; //@YW
        player.hv = 0; //@̍Ȇx
    }
    static void Main() { //public̎w͔C
        Program f = new Program(); //ptH[̃CX^X𐶐
        f.Size = new Size(660, 520); //CX^XSizevpeBɍƕ
        f.Text = "Game"; //CX^XTextvpeBɃtH[
        f.ControlBox = false; //ControlBox\ɂ
        f.FormBorderStyle = FormBorderStyle.Fixed3D; //tH[TCYύX֎~
        Application.Run(f); //CX^Xʂɏo
    }
}

K29 e̊ȈՃAj[V

EeE]摜ƌ݂ɕ\邱ƂŁA]Ă悤Ɍ悤
E摜͉L𗘗p\
  https://rundog.org/si/bullet2.gif bullet2.gif 20x20

菇Ǝdl

@ e摜2Ƃbullet2.gifǍ
A OnPaint\bhɂāAe``悷OɁA`摜̓ւs
@ Zqpƕ֗F
@ pb.i = (pb.i == bulleti) ? bullet2i : bulleti; //摜ݕύX

쐬

//K29 e̊ȈՃAj[V
using System; //tH[AvP[VɕK{
using System.Windows.Forms; //tH[AvP[VɕK{
using System.Drawing; //Imagep
struct Item { //ACe\\
    public Image i; //摜
    public int x;  //SXW
    public int y;  //SYW
    public int hv; //Ȇx(͕̐AE͐̐)
    public int vv; //㉺̑x(͕̐A͐̐)
    public int v;  //\(0F\A1ȏF\)
}
class Program : Form { //FormNXp
    [System.Runtime.InteropServices.DllImport("user32.dll")] //ODLL̃C|[g
    private static extern short GetKeyState(int nVirtKey); //\bh̊O`w
    int gamemode = 0; //0:X^[gʁA1:vC
    int score = 0; //XRA
    Image backi = Image.FromFile("backb.bmp"); //wi摜̓Ǎ
    Image playeri = Image.FromFile("player.gif"); //@摜̓Ǎ
    Image playerl = Image.FromFile("playerl.gif"); //@摜̓Ǎ
    Image playerr = Image.FromFile("playerr.gif"); //@E摜̓Ǎ
    Image bulleti = Image.FromFile("bullet.gif"); //e摜̓Ǎ
    Image bullet2i = Image.FromFile("bullet2.gif"); //yǉze摜2̓Ǎ
    Font font1 = new Font("CI", 20, FontStyle.Bold); //tHg𐶐(CI20P)
    Font fontt = new Font("CI", 80, FontStyle.Bold); //tHg𐶐(CI80P)
    Brush brushs = new SolidBrush(Color.Yellow); //uV𐶐(F)
    Timer timer = new Timer(); //^C}[𐶐
    int backy = 0; //wi摜̂ȂڂYW
    Item player; //vC[̍\̃IuWFNg
    Item pb; //e̍\̃IuWFNg
    //SWpĉ摜`
    private void DrawItem(PaintEventArgs e, Item it) {
        int xx = it.x - it.i.Width / 2; //̔čXW𓾂
        int yy = it.y - it.i.Height / 2; //̔čYW𓾂
        e.Graphics.DrawImage(it.i, xx, yy);
    }
    //`揈
    protected override void OnPaint(PaintEventArgs e) { //Form̃\bhI[o[Ch
        base.OnPaint(e); //܂AFormNXɂ郁\bh̓e({ĕ`揈)s
        e.Graphics.DrawImage(backi, 0, backy); //wi摜(0,Ȃ)`
        e.Graphics.DrawImage(backi, 0, backy - backi.Height); //wi摜̏ɕ`
        if (gamemode == 0) { //X^[g
            e.Graphics.DrawString("GAME1", fontt, brushs, 100, 100); //^Cg̕`
            e.Graphics.DrawString("Hit Enter to Start", font1, brushs, 200, 300); //bZ[W̕`
        } else if (gamemode == 1) { //vC
            string s = String.Format("SCORE:{0:000,000}", score); //XRAҏW
            e.Graphics.DrawString(s, font1, brushs, 400, 10); //XRA̕`
            switch (player.hv) { //@̌ɂĕ
                case  0: player.i = playeri; break; //ʏ
                case  1: player.i = playerr; break; //E 
                case -1: player.i = playerl; break; //
            }
            DrawItem(e, player); //@\
            if (pb.v == 1) { //eH 
                pb.i = (pb.i == bulleti) ? bullet2i : bulleti; //yǉz摜ݕύX
                DrawItem(e, pb); //e\
            }
        }
    }
    //L[͎
    void OnKeyDown(object o, KeyEventArgs e) { //L[{[hꂽɌĂ΂郁\bh
        if(e.KeyCode.ToString() == "Escape") { //EscL[ꂽ
            Close(); //tH[AvP[VI
        }
        if(gamemode == 0 && e.KeyCode.ToString() == "Return") { //X^[gʂEnterL[ꂽ
            gamemode = 1; //vCʂɐ؂ւ
            timer.Start(); //^C}[Jn
            Invalidate(); //ʍĕ`˗
        }
    }
    //^C}[Cxg
    void Play(object o, EventArgs e) { //^C}[Ă΂郁\bh
        backy = (backy < backi.Height) ? backy + 1 : 0; //wi摜̂Ȃڂ
        if (gamemode == 1) { //vC
            player.hv = 0; //@̌ʏɂ
            if (player.x > playeri.Width / 2 && GetKeyState((int)Keys.Left) < 0)
            { //[ł͂ȂL[ĂH
                player.x -= 10; //@
                player.hv = -1; //Ɉړ
            }
            if (player.x < backi.Width - playeri.Width / 2 && GetKeyState((int)Keys.Right) < 0) { //E[ł͂ȂL[ĂH
                player.x += 10; //@E
                player.hv = 1; //EɈړ
            }
        }
        if (GetKeyState((int)Keys.Space) < 0) { //Xy[XL[ĂH
            if (pb.v == 0) { //e\H
                pb.v = 1; //\ɂ
                pb.i = bulleti; //摜ݒ
                pb.x = player.x; //XW͎@̒Sɍ킹
                pb.y = player.y - player.i.Height / 2 - pb.i.Height / 2; //YW͎@̒ɍ킹
                pb.vv = -5; //ړxݒ
            }
        }
        if (pb.v == 1) { //e݂
            pb.y += pb.vv; //YWɏړx𔽉f邱Ƃŏ㏸
            if (pb.y + pb.i.Height / 2 < 0) { //ʏ[ɏo
                pb.v = 0; //e
            }
        }
        Invalidate(); //ʍĕ`˗
    }
    //RXgN^
    Program() { 
        DoubleBuffered = true; //_uobt@O̓
        KeyDown += new KeyEventHandler(OnKeyDown); //L[{[hꂽɌĂ΂郁\bho^
        timer.Tick += new EventHandler(Play); //^C}[Ă΂郁\bho^
        timer.Interval = 10; //^C}[̊Ԋu
        player.i = playeri; //@̉摜
        player.x = 320; //@XW
        player.y = 410; //@YW
        player.hv = 0; //@̍Ȇx
    }
    static void Main() { //public̎w͔C
        Program f = new Program(); //ptH[̃CX^X𐶐
        f.Size = new Size(660, 520); //CX^XSizevpeBɍƕ
        f.Text = "Game"; //CX^XTextvpeBɃtH[
        f.ControlBox = false; //ControlBox\ɂ
        f.FormBorderStyle = FormBorderStyle.Fixed3D; //tH[TCYύX֎~
        Application.Run(f); //CX^Xʂɏo
    }
}

K30 e̕

Ee10ɂ悤
EXy[XL[Əɔ˂Aʏ10鎞́AĂ
EʒuȂǂ͒eƂɎAʏ㕔Aēxˉ\Ƃ

菇Ǝdl

@ e̍ő吔萔maxpbŕێl10Ƃ
@ F static int maxpb = 10;
A e̍\̃IuWFNgAvfmaxpb̔zpbaɂ
@ F Item[] pba = new Item[maxpb];
B `揈Fe``悷鏈A
@ueΕ`悷vSeɂČJԂ悤ɕύX
   ܂A`摜̓ւ̓^C}[CxgɈڂ
C ^C}[CxgFXy[XL[ĂƂ̏A
@u\̎e甭˂vSeɂČJԂ悤ɂ
@ ȂA1甲邱
D ^C}[CxgFeΏֈړA[ɂȂ\ɂ邱Ƃ
@ SeɂČJԂ悤ɂB
   ܂A`摜̓ւ͂ōs

쐬

//K30 e̕
using System; //tH[AvP[VɕK{
using System.Windows.Forms; //tH[AvP[VɕK{
using System.Drawing; //Imagep
struct Item { //ACe\\
    public Image i; //摜
    public int x;  //SXW
    public int y;  //SYW
    public int hv; //Ȇx(͕̐AE͐̐)
    public int vv; //㉺̑x(͕̐A͐̐)
    public int v;  //\(0F\A1ȏF\)
}
class Program : Form { //FormNXp
    [System.Runtime.InteropServices.DllImport("user32.dll")] //ODLL̃C|[g
    private static extern short GetKeyState(int nVirtKey); //\bh̊O`w
    int gamemode = 0; //0:X^[gʁA1:vC
    int score = 0; //XRA
    Image backi = Image.FromFile("backb.bmp"); //wi摜̓Ǎ
    Image playeri = Image.FromFile("player.gif"); //@摜̓Ǎ
    Image playerl = Image.FromFile("playerl.gif"); //@摜̓Ǎ
    Image playerr = Image.FromFile("playerr.gif"); //@E摜̓Ǎ
    Image bulleti = Image.FromFile("bullet.gif"); //e摜̓Ǎ
    Image bullet2i = Image.FromFile("bullet2.gif"); //e摜2̓Ǎ
    Font font1 = new Font("CI", 20, FontStyle.Bold); //tHg𐶐(CI20P)
    Font fontt = new Font("CI", 80, FontStyle.Bold); //tHg𐶐(CI80P)
    Brush brushs = new SolidBrush(Color.Yellow); //uV𐶐(F)
    Timer timer = new Timer(); //^C}[𐶐
    int backy = 0; //wi摜̂ȂڂYW
    Item player; //vC[̍\̃IuWFNg
    static int maxpb = 10; //yǉze̍ő吔
    Item[] pba = new Item[maxpb]; //yύXze̍\̔z
    //SWpĉ摜`
    private void DrawItem(PaintEventArgs e, Item it) {
        int xx = it.x - it.i.Width / 2; //̔čXW𓾂
        int yy = it.y - it.i.Height / 2; //̔čYW𓾂
        e.Graphics.DrawImage(it.i, xx, yy);
    }
    //`揈
    protected override void OnPaint(PaintEventArgs e) { //Form̃\bhI[o[Ch
        base.OnPaint(e); //܂AFormNXɂ郁\bh̓e({ĕ`揈)s
        e.Graphics.DrawImage(backi, 0, backy); //wi摜(0,Ȃ)`
        e.Graphics.DrawImage(backi, 0, backy - backi.Height); //wi摜̏ɕ`
        if (gamemode == 0) { //X^[g
            e.Graphics.DrawString("GAME1", fontt, brushs, 100, 100); //^Cg̕`
            e.Graphics.DrawString("Hit Enter to Start", font1, brushs, 200, 300); //bZ[W̕`
        } else if (gamemode == 1) { //vC
            string s = String.Format("SCORE:{0:000,000}", score); //XRAҏW
            e.Graphics.DrawString(s, font1, brushs, 400, 10); //XRA̕`
            switch (player.hv) { //@̌ɂĕ
                case  0: player.i = playeri; break; //ʏ
                case  1: player.i = playerr; break; //E 
                case -1: player.i = playerl; break; //
            }
            DrawItem(e, player); //@\
            foreach(var pb in pba) { //yǉzSeɂČJԂ
                if (pb.v == 1) { //eH 
                    //pb.i = (pb.i == bulleti) ? bullet2i : bulleti; //yړz摜ݕύX
                    DrawItem(e, pb); //e\
                }
            }
        }
    }
    //L[͎
    void OnKeyDown(object o, KeyEventArgs e) { //L[{[hꂽɌĂ΂郁\bh
        if(e.KeyCode.ToString() == "Escape") { //EscL[ꂽ
            Close(); //tH[AvP[VI
        }
        if(gamemode == 0 && e.KeyCode.ToString() == "Return") { //X^[gʂEnterL[ꂽ
            gamemode = 1; //vCʂɐ؂ւ
            timer.Start(); //^C}[Jn
            Invalidate(); //ʍĕ`˗
        }
    }
    //^C}[Cxg
    void Play(object o, EventArgs e) { //^C}[Ă΂郁\bh
        backy = (backy < backi.Height) ? backy + 1 : 0; //wi摜̂Ȃڂ
        if (gamemode == 1) { //vC
            player.hv = 0; //@̌ʏɂ
            if (player.x > playeri.Width / 2 && GetKeyState((int)Keys.Left) < 0)
            { //[ł͂ȂL[ĂH
                player.x -= 10; //@
                player.hv = -1; //Ɉړ
            }
            if (player.x < backi.Width - playeri.Width / 2 && GetKeyState((int)Keys.Right) < 0) { //E[ł͂ȂL[ĂH
                player.x += 10; //@E
                player.hv = 1; //EɈړ
            }
        }
        if (GetKeyState((int)Keys.Space) < 0) { //Xy[XL[ĂH
            for(int i = 0; i < maxpb; i++) { //yǉzSeɂČJԂ
                if (pba[i].v == 0) { //yύXze[i]\H
                    pba[i].v = 1; //yύXz\ɂ
                    pba[i].i = bulleti; //yύXz摜ݒ
                    pba[i].x = player.x; //yύXzXW͎@̒Sɍ킹
                    pba[i].y = player.y - player.i.Height / 2 - bulleti.Height / 2; //yύXzYW͎@̒ɍ킹
                    pba[i].vv = -5; //yύXzړxݒ
                    break; //yǉz1甲
                }
            }
        }
        for(int i = 0; i < maxpb; i++) { //yǉzSeɂČJԂ
            if (pba[i].v == 1) { //yύXze[i]݂
                pba[i].i = (pba[i].i == bulleti) ? bullet2i : bulleti; //yړĕύXz摜ݕύX
                pba[i].y += pba[i].vv; //yύXzYWɏړx𔽉f邱Ƃŏ㏸
                if (pba[i].y + bulleti.Height / 2 < 0) { //yύXzʏ[ɏo
                    pba[i].v = 0; //yύXze[i]
                }
            }
        }
        Invalidate(); //ʍĕ`˗
    }
    //RXgN^
    Program() { 
        DoubleBuffered = true; //_uobt@O̓
        KeyDown += new KeyEventHandler(OnKeyDown); //L[{[hꂽɌĂ΂郁\bho^
        timer.Tick += new EventHandler(Play); //^C}[Ă΂郁\bho^
        timer.Interval = 10; //^C}[̊Ԋu
        player.i = playeri; //@̉摜
        player.x = 320; //@XW
        player.y = 410; //@YW
        player.hv = 0; //@̍Ȇx
    }
    static void Main() { //public̎w͔C
        Program f = new Program(); //ptH[̃CX^X𐶐
        f.Size = new Size(660, 520); //CX^XSizevpeBɍƕ
        f.Text = "Game"; //CX^XTextvpeBɃtH[
        f.ControlBox = false; //ControlBox\ɂ
        f.FormBorderStyle = FormBorderStyle.Fixed3D; //tH[TCYύX֎~
        Application.Run(f); //CX^Xʂɏo
    }
}

e[}29 p

EɃANVnQ[ɂāAvC[̋ɍ킹ĕ̂̕𓮂ꍇu{^ĂԁAAďvƂƁAPŕKvȏ̐̂̕ɉeĂ܂ƂB
ÉAvO̓쑬xP啝ɑƂB
EɁAA˂\ɂĂꍇÂƂւ̔zKv
Ehɂ́AP̂̓ォ莞Ԃ̓s\ԁpԂĂΗǂ
E쒼Ƀ^C~OvϐZbgăJEg_EsA[ɂȂA̓\ƂƗǂ
E{^ɂA˂\ɂꍇ́A{^̏󋵂ĎĎ肪ꂽA^C~O͂ϐZbg(0ɖ߂)Ɨǂ

K31 e˂̉

EXy[XL[ςȂ̏ꍇ́A̒e̔˂܂œKȗpԂuƂɂ悤
EXy[XL[ĂȂApԂȂŎ̒e̔˂\ɂ悤

菇Ǝdl

@ pԂ萔coldŕێl10Ƃ
A eˑ҂ϐwaitpbŕ\l0Ƃ
B ^C}[CxgFXy[XL[ꂽƂAwaitpb0Ȃ玩e𔭎˂
@ āAwaitpbcoldėpԂƂ悤
C ^C}[CxgFwaitpb0ȏȂ0܂ŃJEg_E悤
D ^C}[CxgFXy[XL[ĂȂ΁Awaitpb0ɂ

